import Enity from "./Enity.js";
import Enemy01 from "./Enemy01.js";
import Enemy02 from "./Enemy02.js";
import Enemy03 from "./Enemy03.js";
class EnemyMaker extends Enity {
    type = 'maker'
    name = 'maker'
    level = 1;//游戏难度，1简单，2普通，3困难
    makerate = 100;//敌人生成频率
    makenum = 2;//敌人生成的数量
    enemyType = new Map()//生成敌人的种类,键为敌人种类编号，值为生成的概率
    time = 0;//时间
    enemy = []
    constructor(level){
        super(0,0,0)
        this.level = level
        this.enemyType.set(1,1)
        // this.enemyMap.push()
    }
    draw = function () {}

    //每单位时间内生成敌人。。
    behavior = function(context){
        this.time++;
        this.hardup(context)//根据分数或者时间调节难度
        context = this.make(context)//生成敌人
        return context
    }
    //调节难度，主要是调节makerate、makenum、enemyType属性
    hardup = function(context){
        if(context.score >=50){
            this.enemyType.set(2,0.2)
        }
        if(context.score >=100){
            this.enemyType.set(3,0.2)
        }
        if(context.score >=200){
            this.enemyType.set(2,0.5)
        }
        if(context.score >=300){
            this.enemyType.set(3,0.5)
        }
        if(context.score >=2000){
            this.enemyType.set(1,0.2)
        }
        if(context.score >=3000){
            this.makenum = 3
        }
    }
    //敌人生成
    make = function(context){
        let keytime = this.time%this.makerate
        if(keytime == 0){//新的敌人生成周期，随机生成敌人
            this.enemy=[]
            for(let i=0;i<this.makenum;i++){
                this.enemy.push({
                    maketime:Math.floor(Math.random()*this.makerate),
                    type:this.randomType(this.enemyType)
                })
            }
        }else{
            this.enemy.forEach(item => {
                if(item.maketime == keytime){
                    if(item.type == 1){
                        context.NodeList.push(new Enemy01(Math.floor(Math.random()*440)+20,-Math.floor(Math.random()*50)-50))
                    }
                    if(item.type == 2){
                        context.NodeList.push(new Enemy02(Math.floor(Math.random()*440)+20,-Math.floor(Math.random()*50)-50))
                    }
                    if(item.type == 3){
                        context.NodeList.push(new Enemy03(Math.floor(Math.random()*440)+20,-Math.floor(Math.random()*50)-50))
                    }
                }
            });
        }
        return context
    }
    //敌人类型随机生成,遍历map，为每一个类型生成一个随机变量然后乘它的比例值，最大的输出。
    randomType = function(map){
        let max = 0;//记录最大
        let type = 0;//记录类型
        let m;//中间变量
        map.forEach((value,key)=>{
            m = Math.random()*value
            if(m>max){
                type = key
                max = m
            }
        })
        return type
    }
}
export default EnemyMaker